package com.shuangti.webdemo.servvice.impl;

import cn.hutool.core.bean.BeanUtil;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.baomidou.mybatisplus.core.metadata.OrderItem;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.shuangti.webdemo.dto.PageDTO;
import com.shuangti.webdemo.mapper.EmpMapper;
import com.shuangti.webdemo.po.Emp;
import com.shuangti.webdemo.query.EmpPage;
import com.shuangti.webdemo.query.PageQuery;
import com.shuangti.webdemo.servvice.EmpService;
import com.shuangti.webdemo.util.JwtUtils;
import com.shuangti.webdemo.vo.EmpPageVo;
import com.shuangti.webdemo.vo.LoginInfo;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;

import java.util.Collections;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

@Slf4j
@Service
@RequiredArgsConstructor
public class EmpServiceImpl extends ServiceImpl<BaseMapper<Emp>,Emp> implements EmpService {
    private final EmpMapper empMapper;
    /**
     * 简单的分页功能，不加分页条件
     */
    @Override
    public Page<Emp> getList() {
        //构建每页查询的条数，和从第几条开始
        int pageOne = 1;
        int pageNum = 4;
        Page<Emp> page = Page.of(pageOne, pageNum);
        //添加分页条件

        //调用page方法，分页查询
        Page<Emp> page1 = this.page(page);
        long pages = page1.getPages();
        System.out.println("总页数为：" + pages);
        return page1;
    }

    /**
     * 根据员工id批量删除员工信息
     */
    @Override
    public void deleteByIds(List<Integer> ids) {

        this.removeBatchByIds(ids);
    }

    /**
     * 根据员工id查询回显信息
     *
     */
    @Override
    public Emp selectByid(Integer id) {

        Emp byId = this.getById(id);

        return byId;
    }

    @Override
    public LoginInfo log(Emp emp) {
        //从前端传入的数据中取出用户名和密码
//        String password = emp.getPassword();
//        String username = emp.getUsername();

        LambdaQueryWrapper<Emp> wrapper = new LambdaQueryWrapper<Emp>();
        wrapper.eq(Emp::getPassword,emp.getPassword()).eq(Emp::getUserName,emp.getUserName());

        Emp emp1 = empMapper.selectOne(wrapper);

        log.info("登录成功：{}",emp1);
        //生成jwt令牌
        Map<String,Object> map = new HashMap<>();
        map.put("id",emp1.getId());
        map.put("name",emp1.getName());
        String token = JwtUtils.generateJwt(map);
        System.out.println(token);
        //创建员工logininf对象，并进行封装返回给controller，再返回给前端
        LoginInfo loginInfo = new LoginInfo();
//        loginInfo.setId(emp1.getId());
//        loginInfo.setPassword(emp1.getPassword());
//        loginInfo.setUserName(emp1.getUserName());

        log.info("生成的令牌为：{}",token);
        BeanUtil.copyProperties(emp1,loginInfo);
        loginInfo.setToken(token);
        return loginInfo;


    }

    /**
     * 复杂分页查询员工信息,我们来日在战，思想会了写不出来
     */
//    @Override
//    //TODO
//    public PageDTO<EmpPageVo> pageList(PageQuery query) {
        // 1.构建条件
        // 1.1.分页条件
//        Page<Emp> page = Page.of(query.getPageNo(),query.getPageSize());

        // 1.2.排序条件
//        if (query.getSortBy() != null) {
           // page.addOrder(new OrderItem(query.getSortBy(),query.getIsAsc()));
//        }else{
            // 默认按照更新时间排序
//            page.addOrder(new OrderItem());
//        }
        // 2.查询

        // 3.数据非空校验

            // 无数据，返回空结果

        // 4.有数据，转换

        // 5.封装返回

//        return null;

//    }
}
